//一.函数
//1.函数定义: function 方法名() : 返回类型
function run():string{
    return 'aa'
}
 
console.log(run())

//2.ts函数传参
function run1(user:string,age:number):any{
    return `${user},${age}`

}
 
console.log(run1('bb',11))

//3.没有返回值的方法
function run3():void{
  console.log('cc')
}
 
run3()

//4.方法的可选参数-!!!注意可选参数必须配置到参数的最后面
function run4(user:string,age?:number):string{
      if(age){
          return `${user},${age}`
      }
      else{
          return `${user}`
      }
}
 
console.log(run4('dd',11))
console.log(run4('dd'))


//5.默认参数-我们允许给函数的参数添加默认值，ts会将添加了默认值的参数识别为可选参数，此时就不受「可选参数必须接在必需参数后面」的限制了,放到哪里都可以
function num(a:number,b:number=1):number{
    return a+b
}
console.log(num(2)) //3

//6.剩余参数(三点运算)-假如传入的参数个数不确定时，可用剩余参数
function num2(a:number,...args:number[]):number{
    let total=a
    args.forEach(item=>{
        total+=item
    })
    return total
}
console.log(num2(1,2)) //3
console.log(num2(1,2,3)) //6


//7.函数重载——指同名但是不同参数的函数方法，作用是可实现多种功能.函数重载允许一个函数接受不同数量或类型的参数时，作出不同的处理；也就是说通过为同一个函数提供多个函数类型定的义来实现多种功能。
//函数重载，需要重复定义多次函数，前几次都是函数定义，最后一次是函数实现。在编辑器的代码提示中，可以正确的看到前两个提示.
function run5(user:string):string;
function run5(age:number):number;

function run5(str:any):any{
    if(typeof str==='string'){
        return `我的名字是${str}`
    }
    else{
        return `我的年龄是${str}`
    }
}

console.log(run5('ee'))
console.log(run5(18))




export {}